
package DAO;

import Entidad.EstacionTrabajo;
import Entidad.Sala;
import Singletons.Mensajes;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

public class EstacionTrabajoDAO {

    public void Crear(EstacionTrabajo estacionTrabajo,EntityManager em) throws PersistenceException {
        try{
            em.persist(estacionTrabajo);
        }catch(Exception e){
            throw new PersistenceException(Mensajes.ERROR_CONEXION_BD);
        }
    }

    public EstacionTrabajo Buscar(Long id,EntityManager em) throws PersistenceException {
        EstacionTrabajo estacion;
        try{
            estacion=em.find(EstacionTrabajo.class, id);
        }catch(Exception e){
            throw new PersistenceException(Mensajes.ERROR_CONEXION_BD);
        }
        return estacion;
    }

    public void Actualizar(EstacionTrabajo nuevo,EntityManager em) throws PersistenceException {
        try{
            em.merge(nuevo);
        }catch(Exception e){
            throw new PersistenceException(Mensajes.ERROR_CONEXION_BD);
        }
    }

    /**
     * este metodo devuelve un ArrayList con todas las estaciones
     * de trabajo en la base de datos
     * @return ArrayList<EstacionTrabajo>
     */
    public ArrayList<EstacionTrabajo> lista(EntityManager em) throws PersistenceException {
        ArrayList<EstacionTrabajo> lista=new ArrayList<EstacionTrabajo>();
        Query consulta = em.createQuery("SELECT u FROM EstacionTrabajo u");
        try{
            List listaEstaciones=consulta.getResultList();
            for(Object e:listaEstaciones)
                lista.add((EstacionTrabajo)e);
        }catch(NoResultException e){
            lista=new ArrayList<EstacionTrabajo>();
        }catch(Exception e){
            throw new PersistenceException(Mensajes.ERROR_CONEXION_BD);
        }
        return lista;
    }

    /**
     * <p>Retorna un ArrayList con todas las estaciones asociadas al id de sala dado</p>
     * @param idSala
     * @param em
     * @return Lista de estaciones.
     * @throws PersistenceException
     */
    public ArrayList<EstacionTrabajo> listaPorSala(Long idSala, EntityManager em) throws PersistenceException {
        ArrayList<EstacionTrabajo> lista=new ArrayList<EstacionTrabajo>();
        Query consulta = em.createQuery("SELECT u FROM EstacionTrabajo u WHERE u.sala.id = :SALA").setParameter("SALA", idSala);
        try{
            List listaEstaciones=consulta.getResultList();
            for(Object e:listaEstaciones)
                lista.add((EstacionTrabajo)e);
        }catch(NoResultException e){
            lista=new ArrayList<EstacionTrabajo>();
        }catch(Exception e){
            throw new PersistenceException(Mensajes.ERROR_CONEXION_BD);
        }
        return lista;
    }

}